package com.zw.mes.module.materialRequisition.controller;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.zw.mes.base.BaseController;
import com.zw.mes.common.JsonResult;
import com.zw.mes.entity.sys.User;
import com.zw.mes.module.materialRequisition.model.CollMatDetail;
import com.zw.mes.module.materialRequisition.model.VerifySheet;
import com.zw.mes.module.materialRequisition.service.MatReqService;
import com.zw.mes.module.prodtaskmanager.model.SysDeptModel;
import com.zw.mes.util.ShiroUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @className: MatReqController
 * @description: 领料申请管理控制层
 * @author： 徐一贺 18341916590
 * @date： 2021/4/12 15:02
 * @office: 智能控制设计科
 * @research institute： 智能控制设计所
 * @department： 机械设计院
 * @company: 辽宁忠旺机械设备制造有限公司
 * @group： 忠旺集团
 * @version: 1.0
 */
@Controller
@RequestMapping("/materialRequisition")
public class MatReqController extends BaseController {
    @Autowired
    private MatReqService service;

    /**
     * @methodName: createPage
     * @description: 跳转到创建领料申请页面
     * @param:
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/12 15:07
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/createPage")
    @RequiresPermissions("req:create:view")
    public String createPage(Model model) {
        User user = ShiroUtils.getUser();
        model.addAttribute("user", user);
        Date currentDate = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        model.addAttribute("currentDate", format.format(currentDate));
        SysDeptModel deptModel = service.getDeptModelByPrimary(user.getDeptId());
        model.addAttribute("dept", deptModel);
        model.addAttribute("mode", "create");
        return "/materialRrequisitionManger/create/page";
    }
    /**
     * @methodName: auditPage
     * @description: 跳转到领料申请审核页面
     * @param:
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 13:04
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/auditPage")
    @RequiresPermissions("req:audit:view")
    public String auditPage(Model model) {
        List<SysDeptModel> deptList = service.findSysDept();
        model.addAttribute("deptList",deptList);
        return "/materialRrequisitionManger/audit/page";
    }
    /**
     * @methodName: queryPage
     * @description: 跳转到领料申请查询页面
     * @param:
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 16:07
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/queryPage")
    @RequiresPermissions("req:query:view")
    public String queryPage(Model model) {
        List<SysDeptModel> deptList = service.findSysDept();
        model.addAttribute("deptList",deptList);
        return "/materialRrequisitionManger/query/page";
    }
    /**
     * @methodName: createPage
     * @description: 跳转到领料申请编辑页面
     * @param: sheet
     * @param: model
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/12 19:04
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/edit/{id}")
    @RequiresPermissions("req:create:edit")
    public String editPage(@PathVariable("id") Integer id, Model model) {
        VerifySheet sheet = new VerifySheet();
        sheet.setId(id);
        User user = ShiroUtils.getUser();
        model.addAttribute("user", user);
        Date currentDate = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        model.addAttribute("currentDate", format.format(currentDate));
        if(user.getDeptId()!=null){
            SysDeptModel deptModel = service.getDeptModelByPrimary(user.getDeptId());
            model.addAttribute("dept", deptModel);
        }
        sheet = service.getVerifySheetByPrimaryKey(sheet.getId());
        model.addAttribute("verifySheet", sheet);
        List<CollMatDetail> collMatDetailList = service.findCollMatDetailByCmtdSheetId(sheet.getId());
        model.addAttribute("collMatDetailList", collMatDetailList);
        model.addAttribute("mode", "see");
        return "/materialRrequisitionManger/create/page";
    }

    /**
     * @methodName: viewPage
     * @description: 跳转到显示页面
     * @param: id
     * @param: model
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 13:14
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/view/{id}")
    @RequiresPermissions(value = {"req:submit:view"},logical = Logical.OR)
    public String viewPage(@PathVariable("id") Integer id, Model model) {
        VerifySheet sheet = new VerifySheet();
        sheet.setId(id);
        User user = ShiroUtils.getUser();
        model.addAttribute("user", user);
        Date currentDate = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        model.addAttribute("currentDate", format.format(currentDate));
        if(user.getDeptId()!=null){
            SysDeptModel deptModel = service.getDeptModelByPrimary(user.getDeptId());
            model.addAttribute("dept", deptModel);
        }
        sheet = service.getVerifySheetByPrimaryKey(sheet.getId());
        model.addAttribute("verifySheet", sheet);
        List<CollMatDetail> collMatDetailList = service.findCollMatDetailByCmtdSheetId(sheet.getId());
        model.addAttribute("collMatDetailList", collMatDetailList);
        model.addAttribute("mode", "view");
        return "/materialRrequisitionManger/create/page";
    }

    @GetMapping("/viewQuery/{id}")
    @RequiresPermissions(value = {"req:query:view"},logical = Logical.OR)
    public String viewQuery(@PathVariable("id") Integer id, Model model) {
        VerifySheet sheet = new VerifySheet();
        sheet.setId(id);
        User user = ShiroUtils.getUser();
        model.addAttribute("user", user);
        Date currentDate = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        model.addAttribute("currentDate", format.format(currentDate));
        if(user.getDeptId()!=null){
            SysDeptModel deptModel = service.getDeptModelByPrimary(user.getDeptId());
            model.addAttribute("dept", deptModel);
        }
        sheet = service.getVerifySheetByPrimaryKey(sheet.getId());
        model.addAttribute("verifySheet", sheet);
        List<CollMatDetail> collMatDetailList = service.findCollMatDetailByCmtdSheetId(sheet.getId());
        model.addAttribute("collMatDetailList", collMatDetailList);
        model.addAttribute("mode", "viewQuery");
        return "/materialRrequisitionManger/create/page";
    }
    /**
     * @methodName: auditPage
     * @description: 跳转到审核页面
     * @param: id
     * @param: model
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 13:19
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/audit/{id}")
    @RequiresPermissions("req:audit:view")
    public String auditPage(@PathVariable("id") Integer id, Model model) {
        VerifySheet sheet = new VerifySheet();
        sheet.setId(id);
        User user = ShiroUtils.getUser();
        model.addAttribute("user", user);
        Date currentDate = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        model.addAttribute("currentDate", format.format(currentDate));
        if(user.getDeptId()!=null){
            SysDeptModel deptModel = service.getDeptModelByPrimary(user.getDeptId());
            model.addAttribute("dept", deptModel);
        }
        sheet = service.getVerifySheetByPrimaryKey(sheet.getId());
        model.addAttribute("verifySheet", sheet);
        List<CollMatDetail> collMatDetailList = service.findCollMatDetailByCmtdSheetId(sheet.getId());
        model.addAttribute("collMatDetailList", collMatDetailList);
        model.addAttribute("mode", "audit");
        return "/materialRrequisitionManger/create/page";
    }

    /**
     * @methodName: createPage
     * @description: 跳转到领料申请提交页面
     * @param:
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/12 18:52
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping("/submitPage")
    @RequiresPermissions("req:submit:view")
    public String submitPage(Model model) {
        List<SysDeptModel> deptList = service.findSysDept();
        model.addAttribute("deptList",deptList);
        return "/materialRrequisitionManger/submit/page";
    }

    /**
     * @methodName: save
     * @description: 保存车间自用原材料领料申请单
     * @param:
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/12 16:53
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/save")
    @RequiresPermissions("req:create:edit")
    public JsonResult save(Integer sheetId, String collMatDetailJson,String delCmtdIdArrayJson) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
        List<CollMatDetail> collMatDetailList = null;
        List<Integer> delCmtdIdList = null;
        if (!collMatDetailJson.equals("[[, ]]")) {
            collMatDetailList = gson.fromJson(collMatDetailJson, new TypeToken<List<CollMatDetail>>() {}.getType());
        } if (!delCmtdIdArrayJson.equals("[[, ]]")) {
            delCmtdIdList = gson.fromJson(delCmtdIdArrayJson, new TypeToken<List<Integer>>() {}.getType());
        }
        return service.save(sheetId,collMatDetailList,delCmtdIdList);
    }

    /**
     * @methodName: submitList
     * @description: 根据条件查询领料申请提交页面查询列表
     * @param: param
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/12 18:39
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/submitList")
    @RequiresPermissions("req:submit:view")
    public JsonResult submitList(VerifySheet param){
        startPage();
        return jsonResult(service.submitList(param));
    }

    /**
     * @methodName: delete
     * @description: 删除领料申请
     * @param: param
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 7:54
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/delete")
    @RequiresPermissions("req:submit:edit")
    public JsonResult delete(Integer id){
        return service.delete(id);
    }
    /**
     * @methodName: auditRemove
     * @description: 审核者删除领料申请
     * @param: id
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 13:14
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/auditRemove")
    @RequiresPermissions("req:audit:delete")
    public JsonResult auditRemove(Integer id){
        return service.auditRemove(id);
    }

    /**
     * @methodName: submit
     * @description: 提交
     * @param: idStr
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 8:09
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/submit")
    @RequiresPermissions("req:submit:edit")
    public JsonResult submit(String idStr){
        return  service.submit(idStr);
    }

    /**
     * @methodName: auditList
     * @description: 获取审核列表
     * @param: param
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 13:22
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/auditList")
    @RequiresPermissions("req:audit:view")
    public JsonResult auditList(VerifySheet param){
        startPage();
        return jsonResult(service.auditList(param));
    }
    /**
     * @methodName: queryList
     * @description: 领料申请查询列表
     * @param: param
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 16:03
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/queryList")
    @RequiresPermissions("req:query:view")
    public JsonResult queryList(VerifySheet param){
        startPage();
        return jsonResult(service.queryList(param));
    }

    /**
     * @methodName: audit
     * @description: 审核
     * @param: param
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣，盖世奇
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/13 14:03
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/audit")
    @RequiresPermissions("req:audit:edit")
    public JsonResult audit(VerifySheet param){
        return service.audit(param);
    }

    /**
     * @methodName: checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrect
     * @description: 检测领料申请的审核流程定义是否完美配置用于提交
     * @param:
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/26 13:15
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrect")
    public JsonResult checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrect(){
        return service.checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrect();
    }
    /**
     * @methodName: checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrect
     * @description: 检测领料申请的审核流程定义是否完美配置用于审核
     * @param:
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/26 13:15
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrectByUnderReview")
    public JsonResult checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrectByUnderReview(){
        return service.checkWhetherTheApprovalConfigurationOfMaterialRequisitionIsCompletelyCorrectByUnderReview();
    }
}
